<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box {
            position: fixed;
            left: 100px;
            width: 100px;
            height: 100px;
            background-color: green;
            margin-top: 100px;
        }
    </style>
</head>

<body>
    <!--
        题目要求: 将定时器的开始和停止过程书写在不同的事件函数内部，容易出现用户多次点击出现加速且运动不能停止的情况，请给出解决代码。 
    -->
    <input type="button" value="开始" id="start">
    <input type="button" value="结束" id="end">
    <div id="box"></div>

    <script src="common.js"></script>
    <script>
        // 获取元素
        var start = my$('start'),
            end = my$('end'),
            box = my$('box');
        //元素初始位置
        var startLeft = 100;
        // 元素结束位置
        var endLeft = 500;
        // 总时长
        var time = 2000;
        // 间隔时间
        var interval = 5;
        //最大次数
        var maxcount = time / interval;
        //步长
        var step = (endLeft - startLeft) / maxcount;
        // 计数器
        var count = 0;
        //全局变量定义timer
        var timer;
        // 开始按钮的触发事件
        addEvent(start, 'click', function() {
            // 在每次触发点击事件后都先清除定时器,
            // 就能有效解决多次点击的加速和运动不能停止问题
            clearInterval(timer)
            timer = setInterval(function() {
                startLeft += step;
                if (count >= maxcount) {
                    startLeft = endLeft;
                    clearInterval(timer)
                }
                box.style.left = startLeft + 'px'
            })
        }, interval);

        //结束按钮触发事件
        addEvent(end, 'click', function() {
            clearInterval(timer);
        })
    </script>
</body>

</html>